<p>
    This is the paragraph before.
</p>
<p id="paragraph">
    This paragraph contains an <ruby id="ruby">annotated <rt id="rt">annotation</rt></ruby> word.
</p>
<p>
    This is the paragraph after.
</p>
<pre id="console">
</pre>
<script>
    if (window.testRunner)
        testRunner.dumpAsText();

    function log(message)
    {
        document.getElementById("console").appendChild(document.createTextNode(message + "\n"));
    }

    function positionAsString(node, offset)
    {
        if (node.nodeType === Node.TEXT_NODE)
            return "\"" + node.data.trim() + "\"[" + offset + "]";
        return node.tagName + "[" + offset + "]";
    }

    function testMovementToEndOfParagraph(node, offset)
    {
        var selection = getSelection();

        selection.collapse(node, offset);
        selection.modify("move", "forward", "paragraphBoundary");
        if (selection.baseNode === paragraph.lastChild && selection.baseOffset === 6)
            log("PASS: Reached the end of the paragraph starting from " + positionAsString(node, offset) + ".");
        else
            log("FAIL: Reached " + positionAsString(selection.baseNode, selection.baseOffset) + " instead "
                + "of the end of the paragraph starting from " + positionAsString(node, offset) + ".");
    }

    function testMovementToStartOfParagraph(node, offset)
    {
        var selection = getSelection();

        selection.collapse(node, offset);
        selection.modify("move", "backward", "paragraphBoundary");
        if (selection.baseNode === paragraph.firstChild && selection.baseOffset === 5)
            log("PASS: Reached the start of the paragraph starting from " + positionAsString(node, offset) + ".");
        else
            log("FAIL: Reached " + positionAsString(selection.baseNode, selection.baseOffset) + " instead "
                + "of the start of the paragraph starting from " + positionAsString(node, offset) + ".");
    }

    var paragraph = document.getElementById("paragraph");
    var ruby = document.getElementById("ruby");
    var rt = document.getElementById("rt");

    testMovementToEndOfParagraph(paragraph, 0);
    testMovementToEndOfParagraph(ruby, 0);
    testMovementToEndOfParagraph(rt, 0);

    testMovementToStartOfParagraph(paragraph, 2);
    testMovementToStartOfParagraph(ruby, 2);
    testMovementToStartOfParagraph(rt, 1);

</script>
